面对社会、科研、企业对于大数据人才的紧迫需求,上海交大网络信息中心联合EMC卓越研究集团,于2015年4月共同举办“EMC杯上海交大智慧校园数据分析大赛”。
这次数据分析大赛将开放校园数据,并启动数据训练营,鼓励同学和社会人士参与到大数据的学习和实践之中。
本次研究是参加EMC杯智慧校园开放数据大赛的比赛报告,比赛举办方是交大网络信息中心;比赛数据由上海交通大学网络信息中心和OMNILab联合提供。
整体上来说,本研究要达到以下几个目标:
我们分析了基于商户信息、用户信息、交易记录、气象记录和校园网记录五个数据集。
数据分为以下几个部分:
用户信息中包含了上海交通大学闵行校区使用过校园卡消费的学生信息。包扩卡号(匿名化)、学号(匿名化)、性别、年龄、入学年、学生类型。共30861项观测,包含30861个一卡通账户、30812个学号,即有49名学生拥有两个一卡通账户。时间跨度为2014-09-01至2015-01-31。
交易记录中包含了上海交通大学闵行校区的校园卡消费信息。每条交易记录包括消费者卡号、商户号、商户所属系统、交易时间、交易金额。共7915289项交易记录,时间跨度为2014-09-01至2015-01-31。
商户信息中包含了上海交通大学大学闵行校区各个商户的信息。包括商户所属系统代码、商户所属系统名称、商户代码、商户名称、商户地点(有缺失)、商户成立时间。共134项观测,包含32个商户系统、85个子商户。
上海天气数据包含了上海交通大学闵行校区的天气数据,共26660项气象记录,时间跨度为2014-08-15至2015-03-25。
校园网记录中包含了共12736408项校园网记录,时间跨度为2014-09-01至2015-01-31。
首先清理数据中的NA值,发现数据的格式较好,并不存在NA值(除部分商铺地点外)。为了更好的分析每次持卡消费的用户数据,我们将trade和account数据合并,先查视数据的概况:
## 'data.frame': 7913633 obs. of 11 variables:
## $ fromaccount: Factor w/ 30861 levels "A10261","A11648",..: 1 2 2 2 2 2 2 2 2 2 ...
## $ toaccount : int 1000143 1000003 1000029 1000091 1000108 1000091 1000001 1000011 1000003 1000029 ...
## $ syscode : int 81 30 34 19 267 19 30 30 30 34 ...
## $ timestamp : POSIXlt, format: "2014-09-27 16:25:08" "2014-12-16 11:41:35" ...
## $ amount : int 580 550 250 122 1000 146 516 450 150 250 ...
## $ cat : chr "supermarket" "mensa" "mensa" "bathwater" ...
## $ studentcode: int 36157082 92011843 92011843 92011843 92011843 92011843 92011843 92011843 92011843 92011843 ...
## $ gender : Factor w/ 2 levels "female","male": 1 2 2 2 2 2 2 2 2 2 ...
## $ yearofbirth: int 1988 1997 1997 1997 1997 1997 1997 1997 1997 1997 ...
## $ grade : int 2013 2014 2014 2014 2014 2014 2014 2014 2014 2014 ...
## $ type : Factor w/ 3 levels "undergraduate",..: 3 1 1 1 1 1 1 1 1 1 ...
整理数据后,可以发现有一些错误数据,比如用户的消费金额小于等于0这类数据共有120条;还会有一些用户的单笔消费数据非常之大,消费金额在100~1600元不等;我们先剔除这些异常数据。
接下来画出直方图统计消费金额比较高的频次分布:
由图可以发现,消费金额在20元(2000分)以上的持卡人群十分少。可以考虑从数据中选取消费金额在(0,2000)区间的用户。利用3- σ原则,我们得到有效数据的上限是’μ+3σ’,为2091.491分,约为21元,这也符合可视化后的结果以及我们现实生活中的消费经验。因此我们选取有效数据的上限为2091分。
我们先看一下数据的概况: